/*
 * TakingMoveFrame.java
 * Team qq 2011
 */
package com.google.code.timetrail.gui;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

import com.google.code.timetrail.backend.*;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingConstants;
import java.awt.Component;
import javax.swing.JSeparator;

public class TakingMoveFrame extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private TakingMoveFrameBackend takingMoveFrameBackend;
	
	/**
	 * Create the panel.
	 */
	private Control myGameControl;
	private JPanel myCD;
	private JLabel foodStatusLabel;
	private JLabel distanceStatusLabel;
	private JLabel rationsStatusLabel;
	private JLabel paceStatusLabel;
	private JLabel currentLocationStatusLabel;

	private JLabel turnStatusLabel;
	private MapPanel panel;
	private JButton changePaceRationsButton;
	private JButton takeTurnButton;
	private JButton btnInventory;

	
	public TakingMoveFrame(Control gameControl, JPanel cd, String previous) {
		//setBounds(new Rectangle(0, 0, 600, 200));
		this.myGameControl = gameControl;
		this.myCD = cd;
		takingMoveFrameBackend = new TakingMoveFrameBackend(myGameControl);
		
		turnStatusLabel = new JLabel(takingMoveFrameBackend.getTurnLabelText());
		
		foodStatusLabel = new JLabel(takingMoveFrameBackend.getFoodLabelText());
		
		distanceStatusLabel = new JLabel(takingMoveFrameBackend.getDistanceLabelText());
		
		rationsStatusLabel = new JLabel(takingMoveFrameBackend.getRationsLabelText());
		
		paceStatusLabel = new JLabel(takingMoveFrameBackend.getPaceLabelText());
		
		currentLocationStatusLabel = new JLabel(takingMoveFrameBackend.getCurrentLocText());
		
		changePaceRationsButton = new JButton(takingMoveFrameBackend.getPaceRationsButtonText());
		changePaceRationsButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				myCD.add(new RationsPaceFrame(myGameControl, myCD, "TakeMove"), "name_1317840867491837002");
                CardLayout cd = (CardLayout) myCD.getLayout();
                cd.last(myCD);
			}
		});
		
	
	   
		//panel = new mapPanel("background2.gif","spaceship.jpg",gameControl);
		//panel.setBounds(0, 0, this.getSize().width, this.getSize().height);
	    //panel.setBorder(BorderFactory.createLineBorder (Color.black, 2));
		//add(panel);
		
		takeTurnButton = new JButton(takingMoveFrameBackend.getContinueButtonText());
		takeTurnButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			    myGameControl.setNextEvent(myGameControl.getRandomEvent());
				if(myGameControl.getCurrentPlace().equals(Place.OREGON)){
					takeTurnButton.setEnabled(false);
				}
				if(takingMoveFrameBackend.isRiverCrossing()){
					
					
					myCD.add(new RiverFrame(myGameControl, myCD), "");
					CardLayout cd = (CardLayout) myCD.getLayout();
					cd.last(myCD);
					
				} else if(takingMoveFrameBackend.isStore()){
				    myCD.add(new StoreFrame(myGameControl, myCD), "");
                    CardLayout cd = (CardLayout) myCD.getLayout();
                    cd.last(myCD);
				}
				if(takingMoveFrameBackend.hasEvent() && !takingMoveFrameBackend.isStore() && !takingMoveFrameBackend.isRiverCrossing()){
				    myGameControl.getNextEvent().Action();
					EventFrameBackend eventFrameBackend = new EventFrameBackend(myGameControl.getNextEvent());
					myCD.add(new EventFrame(myGameControl, eventFrameBackend, myCD), "newEvent");
					myGameControl.setNextEvent(new Event());
					CardLayout cd = (CardLayout) myCD.getLayout();
					cd.last(myCD);
				}
				takingMoveFrameBackend.pressContinue();
				foodStatusLabel.setText(takingMoveFrameBackend.getFoodLabelText());
				distanceStatusLabel.setText(takingMoveFrameBackend.getDistanceLabelText());
				turnStatusLabel.setText(takingMoveFrameBackend.getTurnLabelText());
				currentLocationStatusLabel.setText(takingMoveFrameBackend.getCurrentLocText());
				panel.repaint();
				
				
			}
		});
		
		panel= new MapPanel("assets/images/background2.gif","assets/images/spaceship.jpg",gameControl);
		panel.setBorder(BorderFactory.createLineBorder (Color.black, 1));
		
		
		JSeparator separator = new JSeparator();
		
		btnInventory = new JButton("Inventory");
		btnInventory.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent arg0) {
		        myCD.add(new InventoryFrame(myGameControl, myCD), "");
                CardLayout cd = (CardLayout) myCD.getLayout();
                cd.last(myCD);
		    }
		});
		

		GroupLayout groupLayout = new GroupLayout(this);
		groupLayout.setHorizontalGroup(
		    groupLayout.createParallelGroup(Alignment.LEADING)
		        .addGroup(groupLayout.createSequentialGroup()
		            .addGap(68)
		            .addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
		                .addGroup(groupLayout.createSequentialGroup()
		                    .addComponent(takeTurnButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
		                    .addGap(117))
		                .addGroup(groupLayout.createSequentialGroup()
		                    .addComponent(btnInventory)
		                    .addPreferredGap(ComponentPlacement.RELATED)))
		            .addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
		                .addComponent(changePaceRationsButton, GroupLayout.PREFERRED_SIZE, 161, GroupLayout.PREFERRED_SIZE)
		                .addComponent(turnStatusLabel, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
		                .addComponent(foodStatusLabel, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
		                .addGroup(groupLayout.createParallelGroup(Alignment.TRAILING, false)
		                    .addComponent(currentLocationStatusLabel, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
		                    .addComponent(paceStatusLabel, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
		                    .addComponent(rationsStatusLabel, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
		                    .addComponent(distanceStatusLabel, Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)))
		            .addGap(93))
		        .addGroup(Alignment.LEADING, groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(panel, GroupLayout.DEFAULT_SIZE, 588, Short.MAX_VALUE)
					.addContainerGap())
		        .addGroup(groupLayout.createSequentialGroup()
		            .addContainerGap()
		            .addComponent(separator, GroupLayout.DEFAULT_SIZE, 494, Short.MAX_VALUE)
		            .addContainerGap())
		);
		groupLayout.setVerticalGroup(
		    groupLayout.createParallelGroup(Alignment.TRAILING)
		        .addGroup(groupLayout.createSequentialGroup()
		            .addContainerGap()
		            .addComponent(panel, GroupLayout.PREFERRED_SIZE, 178, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
		            .addComponent(separator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
		            .addPreferredGap(ComponentPlacement.RELATED)
		            .addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
		                .addGroup(groupLayout.createSequentialGroup()
		                    .addGap(8)
		                    .addComponent(turnStatusLabel, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
		                    .addGap(11)
		                    .addComponent(foodStatusLabel, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
		                    .addGap(11)
		                    .addComponent(distanceStatusLabel, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
		                    .addGap(11)
		                    .addComponent(rationsStatusLabel, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
		                    .addPreferredGap(ComponentPlacement.RELATED, 101, Short.MAX_VALUE)
		                    .addComponent(paceStatusLabel, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
		                    .addGap(11)
		                    .addComponent(currentLocationStatusLabel, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
		                    .addPreferredGap(ComponentPlacement.UNRELATED)
		                    .addComponent(changePaceRationsButton, GroupLayout.PREFERRED_SIZE, 23, GroupLayout.PREFERRED_SIZE)
		                    .addGap(16))
		                .addGroup(groupLayout.createSequentialGroup()
		                    .addPreferredGap(ComponentPlacement.RELATED, 131, Short.MAX_VALUE)
		                    .addComponent(takeTurnButton, GroupLayout.PREFERRED_SIZE, 46, GroupLayout.PREFERRED_SIZE)
		                    .addGap(52)
		                    .addComponent(btnInventory)
		                    .addGap(27))))
		);
		groupLayout.linkSize(SwingConstants.HORIZONTAL, new Component[] {turnStatusLabel, foodStatusLabel, distanceStatusLabel, rationsStatusLabel, paceStatusLabel, currentLocationStatusLabel, changePaceRationsButton});
        setLayout(groupLayout);
	}
}
